package com.relytosoft.mizar.analyze.structure.services.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.relytosoft.dubhe.common.core.base.page.PageQuery;
import com.relytosoft.mizar.analyze.base.entity.pojo.dto.TaskRequestDto;
import com.relytosoft.mizar.analyze.structure.api.entity.AyStructureTaskSon;
import com.relytosoft.mizar.analyze.structure.api.pojo.dto.AyTaskIdDto;
import com.relytosoft.mizar.analyze.structure.api.pojo.query.AyStructureTaskSonQuery;

import java.util.List;

/**
 * @Author: zyc
 * @version: v1.0
 * @description: com.relytosoft.mizar.analyze.structure.services.service
 * @Date: 2022/5/13 9:48
 */
public interface AyStructureTaskSonService extends IService<AyStructureTaskSon> {

    /**
     * 分页查询
     *
     * @param pageQuery
     * @param ayStructureTaskSonQuery
     * @return
     */
    IPage<AyStructureTaskSon> selectAyStructureTaskSonPageList(PageQuery pageQuery, AyStructureTaskSonQuery ayStructureTaskSonQuery);

    /**
     * 添加结构化子任务/添加通道
     *
     * @param
     */
    boolean insertAyStructureTaskSon(AyStructureTaskSon ayStructureTaskSon);

    /**
     * 修改结构化子任务状态
     */
    boolean updateAyStructureTaskSon(AyTaskIdDto ayTaskIdDto);

    /**
     * 启动结构化子任务
     */
    boolean startAyStructureTaskSon(AyTaskIdDto ayTaskIdDto, AyStructureTaskSon ayStructureTaskSon);

    /**
     * 停止结构化子任务
     */
    boolean stopAyStructureTaskSon(AyTaskIdDto ayTaskIdDto, AyStructureTaskSon ayStructureTaskSon);

    /**
     * 创建kafka消息对象
     */
    TaskRequestDto createRequest(AyStructureTaskSon ayStructureTaskSon);

    /**
     * 创建结构化子任务对象
     */
    AyStructureTaskSon createTaskSon(AyStructureTaskSon ayStructureTaskSon);

    /**
     * 通过主任务id查子任务
     */
    List<AyStructureTaskSon> selectByStructureTaskId(Integer id);


    /**
     * 发送新增子任务kafka消息
     */
    void insertStructureTaskSonKafkaOpMsg(TaskRequestDto taskRequestDto);

    /**
     * 发送删除子任务kafka消息
     */
    void deleteStructureTaskSonKafkaOpMsg(String taskId);

    /**
     * 更新主任务状态
     *
     * @param structureTaskId
     */
    void updateTaskStatus(Integer structureTaskId);

    /**
     * 判断所有子任务的主任务id是否相等
     *
     * @param ayStructureTaskSons
     * @return
     */
    Integer getStructureTaskId(List<AyStructureTaskSon> ayStructureTaskSons);
}
